package com.song.ejf.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.hibernate.Session;

import com.song.ejf.page.Page;

/** 统一数据访问接口 */
public interface BaseDAO {
	
	public Session getSessions();
	/** 加载指定ID的持久化对象 */
	@SuppressWarnings("rawtypes") 
	public Object loadById(Class clazz,Serializable id);
	
	/** 加载满足条件的持久化对象 */
	public Object loadObject(String hql);
	
	/** 删除指定ID的持久化对象 */
	public void delById(Class<?> clazz,Serializable id);
	
	/** 保存或更新指定的持久化对象 */
	public void saveOrUpdate(Object obj);
	
	/** 装载指定类的所有持久化对象 */
	public List<?> listAll(String clazz);
	
	/** 分页装载指定类的所有持久化对象 */
	public List<?> listAll(String clazz,int pageNo,int pageSize);
	
	/** 统计指定类的所有持久化对象 */
	public int countAll(String clazz);
	
	/** 查询指定类的满足条件的持久化对象 */
	public List<?> query(String hql);
	
	/** 查询指定类的满足条件的持久化对象 */
	public List<?> querySQL(String hql);
	
	/*执行sql语句*/
	public int executeSQL(String sql);
	
	/** 分页查询指定类的满足条件的持久化对象 */
	public List<?> query(String hql,int pageNo,int pageSize);
	
	/** 统计指定类的查询结果 */
	public int countQuery(String hql);
	
	/** 条件更新数据 */
	public int update(String hql);
	
	/***分页查询***/
	public Page pageQuery(Page page,String hql,String sql);
	
	public List<Map<String, String>> executeSqlQuery(String sql);
	//sql分页 用于联合查询分页
	public void sqlPageQuery(Page page, String selectSql, String mainSql,String order,Map<String, String> paraMap) throws Exception;
	//用于联合查询，不带分页。
	public List<Map<String,String>> sqlQuery(String mainSql,Map<String, String> paraMap) throws Exception;
	//执行一个sql语句.
	public boolean exeQuery(String mainSql,Map<String, String> paraMap) throws Exception;
}

